/**
  ******************************************************************************
  * @file    main.c
  * @author  ashuai0110
  * @version V2.0
  * @date    2024-09-01
  * @brief   使用举例-软件定时器
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module
  *
  ******************************************************************************
  */

/* 包含头文件-----------------------------------------------------------------*/
#include "bsp.h"

#include "timer_software.h"

/* 私有宏定义-----------------------------------------------------------------*/

/* 私有类型定义---------------------------------------------------------------*/

/* 私有变量-------------------------------------------------------------------*/
static timer_s_t ledBlinkTimerS; /* led闪烁任务 */
static timer_s_t printTimerS;    /* 打印任务 */

/* 全局变量-------------------------------------------------------------------*/

/* 私有函数原型---------------------------------------------------------------*/


/**
  * @brief  This function handles SysTick Handler.
  *
  * @param  None
  *
  * @retval None
  */
void SysTick_Handler(void)
{
    /* 组件计时节拍接口 */
    mw_tick_inc(1);
}

/**
  * @brief  led闪烁任务回调函数
  *
  * @param  None
  *
  * @retval None
  */
void led_blink_callback(void)
{
    bsp_led_toggle();
}

/**
  * @brief  打印任务回调函数
  *
  * @param  None
  *
  * @retval None
  */
void print_callback(void)
{
    MW_DEBUG_LOG("print task");
}

/**
  * @brief  main
  */
int main(int argc, char *argv[])
{
    MW_VER_LOG("example-timer_software", 2, 0, 0);
    
    /* BSP初始化 */
    bsp_init();
    
    uint8_t ret = 0;
    /* 软件定时器初始化 */
    /* led闪烁任务 500ms周期 */
    ret = timer_s_init(&ledBlinkTimerS, 500, led_blink_callback, TIMER_RUN_START);
    if(MW_RET_OK != ret) { MW_ERROR_LOG("timer_s_init failure"); }
    /* 打印任务 1000ms周期 */
    ret = timer_s_init(&printTimerS, 1000, print_callback, TIMER_RUN_START);
    if(MW_RET_OK != ret) { MW_ERROR_LOG("timer_s_init failure"); }
    
    while(1)
    {
        /* 软件定时器轮询处理 */
        timer_s_poll();
    }
}

